const rp = require('request-promise')
const APPID = 'wx83ed21db6ad34120'
const APPSECRET = 'e2887d17277246b4e1b4c4880c2b0208'
const URL = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`

// 引入内部写文件模块，不需要安装
const fs = require('fs')

// 引入路径工具模块
const path = require('path')
// __dirname  当前文件的绝对路径
const fileName = path.resolve(__dirname, './access_token.json')

const updateAccessToken = async () => {
    const resStr = await rp(URL)
    const res = JSON.parse(resStr)
    // 写文件 用同步方法
    if (res.access_token) {
        fs.writeFileSync(fileName, JSON.stringify({
            access_token: res.access_token,
            createTime: new Date()
        }))
    } else {
        await updateAccessToken()
    }
}
// 2.定义从文件中取出token的方法
const getAccessToken = async () => {
    // 读取文件 用同步方法
    try {
        const readRes = fs.readFileSync(fileName, 'utf8')
        const readObj = JSON.parse(readRes)
        const createTime = new Date(readObj.createTime).getTime()//创建时间距离1970年的毫秒数
        const nowTime = new Date().getTime()//当前时间距离1970年的毫秒数
        if((nowTime - createTime) / 1000/ 60 / 60 >= 2){
            await updateAccessToken()
            await getAccessToken()
        }
        return readObj.access_token
    } catch (error) {
        // 如果读取的时候没有该文件，就调用更新方法去获取token并生成文件
        await updateAccessToken()
        // 再次读取
        await getAccessToken()
    }
}
// token的有效期为2小时，需要开启定时器定时获取token 提前5分钟去获取
setInterval(async () => {
    await updateAccessToken()
}, (7200 - 300) * 1000)
// updateAccessToken()
    // console.log(getAccessToken()) 
// 导出模块
module.exports = getAccessToken
